请求校验 token 源码解析

CheckToken 的目的

Token 校验核心功能

当用户携带 token 请求资源服务器的资源时,Spring Security 拦截 token,进行 token 和 userdetails 匹配过程,把无状态的 token 转化成具体用户。

Token 校验流程图

Filter 拦截请求进行鉴权

BearerTokenAuthenticationFilter 拦截所有资源服务器的请求,执行以下操作:

  • 解析 header 或者参数中的 access_token 字段
  • 根据 access_token 构造出来 BearerTokenAuthenticationToken 认证对象
BearerToken 拦截流程

匹配自省鉴权处理器

自省鉴权处理器匹配

调用自省拦截器实现处理

权限实时更新机制

为避免 Redis 存储旧数据,系统会根据用户认证信息再次调用 PigxUserDetailsService 查询数据库中的最新数据,实现权限实时更新。

处理流程:

  • PigxRedisOAuth2AuthorizationService 通过 token value 查询认证中心下发令牌时存储的用户认证信息
  • 根据用户认证信息再次调用 PigxUserDetailsService 查询数据库中的最新数据
自省拦截器处理流程

接口权限判断

使用 hasPermission 进行权限判断:

@GetMapping("/export")
@PreAuthorize("@pms.hasPermission('sys_user_import_export')")
public List<UserExcelVO> export(UserDTO userDTO) {
}
权限判断实现

PIGX 权限模型

PIGX 权限模型架构